package com.xingkeduo.business.user.service;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.xingkeduo.dao.database.DatabaseAccessObject;
import com.xingkeduo.pojo.query.CraftsmanLevelQO;
import com.xingkeduo.pojo.table.CraftsmanLevelTO;
import com.xingkeduo.util.pojo.enums.YesNoEnum;
import com.xingkeduo.util.pojo.exception.DataException;
import com.xingkeduo.util.tool.CommonUtil;
import com.xingkeduo.util.tool.IdentityUtil;
import com.xingkeduo.util.tool.IdentityUtil.Worker;

/**
 * 一线员工职级类
 * 
 * @author 高杰
 * @time 2019年1月8日 下午4:35:36
 * @description
 */
@Component
public class CraftsmanLevelService {
	private static final String NAMESPACE = CommonUtil.formatNamespace(CraftsmanLevelTO.class);
	@Resource(name = "mysqlUserMasterDao")
	private DatabaseAccessObject<CraftsmanLevelTO, CraftsmanLevelQO> dao;

	/**
	 * 查询
	 * 
	 * @author 高杰
	 * @time 2019年1月8日 下午4:35:41
	 * @param id
	 * @return
	 * @throws Throwable
	 */
	public CraftsmanLevelTO selectByPrimary(long id) throws Throwable {
		return dao.select(NAMESPACE, id);
	}
	/**
	 * 查询数量
	 *
	 * @author 高杰
	 * @time 2019年1月8日 下午4:35:41
	 * @param craftsmanLevelQO
	 * @return
	 * @throws Throwable
	 */
	public int count(CraftsmanLevelQO craftsmanLevelQO) throws Throwable {
		return dao.selectCount(NAMESPACE, craftsmanLevelQO);
	}

	/**
	 * 查询
	 * 
	 * @author 高杰
	 * @time 2019年1月8日 下午4:35:47
	 * @param login
	 * @return
	 * @throws Throwable
	 */
	public CraftsmanLevelTO selectByFirstSequence() throws Throwable {
		return selectBySequence(1);
	}

	/**
	 * 查询
	 * 
	 * @author 高杰
	 * @time 2019年1月8日 下午4:35:47
	 * @param login
	 * @return
	 * @throws Throwable
	 */
	public CraftsmanLevelTO selectByNextSequence(int sequence) throws Throwable {
		return selectBySequence(++sequence);
	}

	/**
	 * 查询
	 * 
	 * @author 高杰
	 * @time 2019年1月8日 下午4:35:47
	 * @param login
	 * @return
	 * @throws Throwable
	 */
	public CraftsmanLevelTO selectBySequence(int sequence) throws Throwable {
		CraftsmanLevelQO query = new CraftsmanLevelQO().setSequence(sequence).setIsDelete(YesNoEnum.NO);
		List<CraftsmanLevelTO> list = dao.select(NAMESPACE, query);
		if (list == null || list.size() < 1)
			return null;
		if (list.size() > 1)
			throw new DataException(DataException.Type.NOTONLY, "发型师");
		return list.get(0);
	}

	/**
	 * 查询
	 * 
	 * @author 高杰
	 * @time 2019年1月8日 下午4:35:54
	 * @param query
	 * @return
	 * @throws Throwable
	 */
	public List<CraftsmanLevelTO> selectByQuery(CraftsmanLevelQO query) throws Throwable {
		return dao.select(NAMESPACE, query);
	}

	/**
	 * 添加
	 * 
	 * @author 高杰
	 * @time 2019年1月8日 下午4:35:59
	 * @param craftsman
	 * @return
	 * @throws Throwable
	 */
	@Transactional
	public void insert(CraftsmanLevelTO craftsmanLevel) throws Throwable {
		craftsmanLevel.initId(IdentityUtil.nextId(Worker.USER));
		if (dao.insert(NAMESPACE, craftsmanLevel) < 1)
			throw new DataException(DataException.Type.FAIL, "一线员工职级信息");
	}

	/**
	 * 修改
	 * 
	 * @author 高杰
	 * @time 2019年1月8日 下午4:36:06
	 * @param craftsman
	 * @return
	 * @throws Throwable
	 */
	@Transactional
	public void update(CraftsmanLevelTO craftsmanLevel) throws Throwable {
		if (dao.update(NAMESPACE, craftsmanLevel) < 1)
			throw new DataException(DataException.Type.FAIL, "一线员工职级信息");
	}
}
